package com.bitinstitute.parkapp.googlemaps;

import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.GoogleMap.OnInfoWindowClickListener;
import com.google.android.gms.maps.MapFragment;
import com.google.android.gms.maps.model.BitmapDescriptorFactory;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.Marker;
import com.google.android.gms.maps.model.MarkerOptions;
import com.bitinstitute.parkapp.R;
import com.bitinstitute.parkapp.animals.types.TypesSingleMenuItemActivity;
import com.bitinstitute.parkapp.helper.AlertDialogManager;
import com.bitinstitute.parkapp.helper.GPSConnectionDetector;
import com.bitinstitute.parkapp.helper.InternetConnectionDetector;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.widget.Toast;

/**
 * 
 * This class will show the google API V2
 *
 */



public class MapActivity extends Activity implements LocationListener{
	
	
	private GoogleMap map;
	LatLng POS;
	public LatLng ACTP;
	
	static final LatLng BIT = new LatLng(49.48428, 8.45546);
	static final LatLng PINGUIN = new LatLng(49.485134,8.457572);
	static final LatLng FISCH = new LatLng(49.484699, 8.451826);
	static final LatLng STORCH = new LatLng(49.486238,8.453624);	
	
	static final String KEY_NAME = "name";
	static final String KEY_SCI = "sci_name";
	static final String KEY_ORIGIN = "origin";
	static final String KEY_FOOD = "food";
	static final String KEY_SIZE = "size";
	static final String KEY_WEIGHT = "weight";
	static final String KEY_INCUBATION = "incubation";
	static final String KEY_EGGS = "eggs";
	static final String KEY_AGE = "age";
	static final String KEY_PLACE = "place";
	static final String KEY_HEADING1 = "heading1";
	static final String KEY_DESC1 = "description1";
	static final String KEY_HEADING2 = "heading2";
	static final String KEY_DESC2 = "description2";
	static final String KEY_HEADING3 = "heading3";
	static final String KEY_DESC3 = "description3";
	static final String KEY_THUMB_URL = "thumb_url";
	static final String KEY_SOUND = "sound";
	static final String KEY_VIDEO = "video";
	
	// Connection detector class
	InternetConnectionDetector cd;

	// flag for Internet connection status
	Boolean isInternetPresent = false;
	
	GPSConnectionDetector gps;

	// Alert Dialog Manager
	AlertDialogManager alert = new AlertDialogManager();
	
//	OnLocationChangedListener listener = null;
	
	LocationManager locmanager;
	
	String provider;
	
	Criteria criteria;


/** Called when the activity is first created. */
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		    super.onCreate(savedInstanceState);
		    setContentView(R.layout.google);
		    
		    this.createMarker();
		    		    	
		    cd = new InternetConnectionDetector(getApplicationContext());
		    
		    
					// Check if Internet present
					isInternetPresent = cd.isConnectingToInternet();
					if (!isInternetPresent) {
						// Internet Connection is not present
						alert.showAlertDialog(MapActivity.this,
								"Internet Connection Error",
								"Please connect to working Internet connection", false);
						// stop executing code by return
						// return;
					}
					
			gps = new GPSConnectionDetector(this);		
		    
		    locmanager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
		    
		    criteria = new Criteria();
		    
		}	       
		 
/**
 * 	
 */
	@Override

	protected void onResume() {
		
		locmanager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 100, 10f, this);
		super.onResume();
	}
	
	
	
//	@Override
//	protected void onPause()
//	{
//		locmanager.removeUpdates(this);
//		super.onPause();
//	}
//	
//	
	

	public void onLocationChanged(Location location) {
		
	}


	public void onProviderDisabled(String provider) {
		
		Toast.makeText(getApplicationContext(), "Gps Disabled",
				Toast.LENGTH_SHORT).show();
		gps.showSettingsAlert();
	}


	public void onProviderEnabled(String provider) {
		
		Toast.makeText(getApplicationContext(), "Gps Enabled",
		        Toast.LENGTH_SHORT).show();		
	}


	/**
	 * creates the marker on the map
	 */
	@SuppressLint("NewApi")
	public void createMarker()
	{	
		gps = new GPSConnectionDetector(this);
		
		MapFragment fm = (MapFragment) getFragmentManager().findFragmentById(R.id.map);
		
		   
	    map = fm.getMap();
	    
	    map.addMarker(new MarkerOptions().position(BIT)
	            .title("BitInstitut"));
	    
	   final Marker pingu = map.addMarker(new MarkerOptions().position(PINGUIN)
	            .title("Pinguin")
	            .snippet("Pinguine - damit verbindet man Eis und Schnee.")
	            .icon(BitmapDescriptorFactory
	                .fromResource(R.drawable.map_penguin)));
	    
	   final Marker fish = map.addMarker(new MarkerOptions().position(FISCH)
	    		.title("Anemonenfisch")
	    		  .snippet("Anemonenfische leben im Salzwasser")
	            .icon(BitmapDescriptorFactory
	                .fromResource(R.drawable.map_fish)));
	    
	    final Marker stork = map.addMarker(new MarkerOptions().position(STORCH)
	    		.title("Storch")
	    		  .snippet("Warum klappert der Klapperstorch?")
	    		  .icon(BitmapDescriptorFactory
	                .fromResource(R.drawable.map_stork)));
	    
	    
        // Move the camera instantly to BIT Institute with a zoom of 15.
        map.moveCamera(CameraUpdateFactory.newLatLngZoom(BIT, 5));

        // Zoom in, animating the camera.
        map.animateCamera(CameraUpdateFactory.zoomTo(15), 70, null);
        
        	        
        map.setMyLocationEnabled(true);
        
        map.setOnInfoWindowClickListener(new OnInfoWindowClickListener() {
			
			public void onInfoWindowClick(Marker marker) {
				
				if(marker.equals(stork))
				{
					animalPage("stork");
				}
				if(marker.equals(fish))
				{
					animalPage("fish");
				}
				if(marker.equals(pingu))
				{
					animalPage("pingu");
				}
				
			}

		
		});
		
	}
	
	
	/**
	 * creates the animal intent of the animal-marker, which is clicked
	 * @param marker, a String of the animal-name
	 */
	public void animalPage(String marker)
	{
		if(marker.equals("stork"))
		{
		Intent in = new Intent(MapActivity.this,
				TypesSingleMenuItemActivity.class);
		in.putExtra(KEY_NAME, "Weißstorch");
		in.putExtra(KEY_SCI, "Ciconia Ciconia");
		in.putExtra(KEY_ORIGIN, "Europa, Afrika");
		in.putExtra(KEY_FOOD, "Insekten, Reptilien, Würmer, Schnecken, Kleinsäuger, Fische, Amphibien");
		in.putExtra(KEY_SIZE, "Ca. 80 - 100 cm (Scheitelhöhe)");
		in.putExtra(KEY_WEIGHT, "3 - 4 kg");
		in.putExtra(KEY_INCUBATION, "ca. 32 Tage");
		in.putExtra(KEY_EGGS, "4");
		in.putExtra(KEY_AGE, "35 Jahre (im Gehege)");
		in.putExtra(KEY_PLACE, "Nester im ganzen Park, z.B. auf der Festhalle Baumhain");
		in.putExtra(KEY_HEADING1, "Klapperstorch");
		in.putExtra(KEY_DESC1, "Warum klappert der Klapperstorch? Na, weil er nichts anderes kann! Im Gegensatz zu den meisten Singvögeln ist die Stimme erwachsener Weißstörche stark zurückgebildet. Das Schnabelklappern dient deshalb der Verständigung und kommt beispielsweise bei der Begrüßung des Partners, bei der Nestverteidigung oder bei der Balz zum Einsatz.");
		in.putExtra(KEY_HEADING2, "Froschfresser?");
		in.putExtra(KEY_DESC2, "Nein, nicht ausschließlich - eher ein \"tierischer\" Allesfresser. Weißstörche haben ein breites Nahrungsspektrum. Je nach Jahreszeit jagen sie die Beute, die gerade verfügbar ist. Besonders während der Jungenaufzucht bevorzugen sie Regenwürmer und Insekten - sozusagen Babynahrung.");
		in.putExtra(KEY_HEADING3, "\"Schnellwachser\"");
		in.putExtra(KEY_DESC3, "Dieser ausgewogenen Ernährung verdanken die Jungvögel ihren rekordverdächtigen Größenzuwachs: die Flügel wachsen zum Teil einen Zentimeter, die Beine 0,7 Zentimeter pro Tag! Ihr Schlupfgewicht von etwa 75 Gramm haben sie schon nach 14 Tagen verzehnfacht. Nach acht bis zehn Wochen sind sie bereits flügge. Übrigens: Im Luisenpark lebt die größte großstädtische Storchenkolonie Deutschlands!");
		in.putExtra(KEY_THUMB_URL, "http://watermark.wa.funpic.de/parkGuide/tiere/arten/Tiere_Arten_Stoerche_webUe.jpg");
		in.putExtra(KEY_SOUND, "http://watermark.wa.funpic.de/parkGuide/tiere/sounds/weisstorch.mp3");
		in.putExtra(KEY_VIDEO, "");

		startActivity(in);
		}
		
		if(marker.equals("pingu"))
		{
			Intent in = new Intent(MapActivity.this,
					TypesSingleMenuItemActivity.class);
			in.putExtra(KEY_NAME, "Humboldt-Pinguin");
			in.putExtra(KEY_SCI, "Spheniscus humboldti");
			in.putExtra(KEY_ORIGIN, "Westküste Südamerikas");
			in.putExtra(KEY_FOOD, "Fisch");
			in.putExtra(KEY_SIZE, "60 cm");
			in.putExtra(KEY_WEIGHT, "5 kg");
			in.putExtra(KEY_INCUBATION, "40 - 42 Tage");
			in.putExtra(KEY_EGGS, "2");
			in.putExtra(KEY_AGE, "bis 20 Jahre");
			in.putExtra(KEY_PLACE, "Gehege am Ufer des Kutzerweihers auf Höhe der Festhalle Baumhain");
			in.putExtra(KEY_HEADING1, "Wüstenpinguine");
			in.putExtra(KEY_DESC1, "Pinguine - damit verbindet man Eis und Schnee. Aber Pinguine am Rande der Atacamawüste? Humboldtpinguine leben an der Pazifikküste Südamerikas, sie sind über die ganze Küste Perus, aber auch im ganzen Nordteil von Chile verbreitet.");
			in.putExtra(KEY_HEADING2, "\"Flieger\" unter Wasser.....");
			in.putExtra(KEY_DESC2, "Pinguine können bekanntlich mit ihren kleinen Flügeln nicht durch die Lüfte fliegen. Dafür sind sie aber ausgezeichnete Schwimmer und Taucher, die pfeilschnell durchs Wasser schießen. Generell tauchen Humboldtpinguine nur wenig tiefer als einen Meter und fischen direkt unter der Wasseroberfläche. Die bisherige dokumentierte Rekordtiefe eines Humboldtpinguins liegt allerdings bei knapp 70 Metern. Auf der Jagd nach Fischen schwimmen die Humboldtpinguine unter Wasser bis zu 10 Kilometer pro Stunde schnell.");
			in.putExtra(KEY_HEADING3, ".....Tollpatsch an Land");
			in.putExtra(KEY_DESC3, "An Land sind sie etwas weniger rasant und rutschen entweder auf dem Bauch, oder \"watscheln\" in ihrem typisch aufrechten Gang daher.");
			in.putExtra(KEY_THUMB_URL, "http://watermark.wa.funpic.de/parkGuide/tiere/arten/Tiere_Arten_HumbwebUe.jpg");
			in.putExtra(KEY_SOUND, "http://watermark.wa.funpic.de/parkGuide/tiere/sounds/pinguin.mp3");
			in.putExtra(KEY_VIDEO, "http://watermark.wa.funpic.de/parkGuide/tiere/movies/pinguin.mp4");

			startActivity(in);
			
		}
		
		if(marker.equals("fish"))
		{
			Intent in = new Intent(MapActivity.this,
					TypesSingleMenuItemActivity.class);
			in.putExtra(KEY_NAME, "Anemonenfisch");
			in.putExtra(KEY_SCI, "Anemonefish");
			in.putExtra(KEY_ORIGIN, "Indischer und Pacifi Ozean");
			in.putExtra(KEY_FOOD, "Tunicate Larven, Algen, Copepoden");
			in.putExtra(KEY_SIZE, "10 - 18 cm");
			in.putExtra(KEY_WEIGHT, "1 - 2.5 kg");
			in.putExtra(KEY_INCUBATION, "6 - 10 Tage");
			in.putExtra(KEY_EGGS, "100 - 1000");
			in.putExtra(KEY_AGE, "6 - 10 Jahre");
			in.putExtra(KEY_PLACE, "");
			in.putExtra(KEY_HEADING1, "\"NEMO\" UND DIE \"ANEMONE\"");
			in.putExtra(KEY_DESC1, "Anemonenfische leben in einer engen Lebensgemeinschaft mit Seeanemonen (Symbiose). Bei Gefahr gewährt die wehrhafte Anemone dem Fisch Unterschlupf und damit Schutz vor Fressfeinden. Als Gegenleistung hält der Anemonenfisch seine Anemone \"sauber\" und verteidigt sie gegen fremde Eindringlinge.");
			in.putExtra(KEY_HEADING2, "CHEMISCHE TARNKAPPE");
			in.putExtra(KEY_DESC2, "Warum wird der Anemonenfisch aber nicht selbst genesselt? Die Lösung ist einfach – er schleimt sich ein. Tatsächlich reiben sich die Fische an der nicht nesselnden Unterseite der Anemonen mit Schleim ein, dabei übernehmen sie Schutzstoffe der Anemonen und werden so nicht als fremd erkannt. Fehlt dieser Schleimüberzug, werden sie genesselt.");
			in.putExtra(KEY_HEADING3, "MÄNNCHEN ODER WEIBCHEN?");
			in.putExtra(KEY_DESC3, "Alle Anemonenfische sind zunächst Männchen. In einer Gruppe verwandelt sich dann das größte Tier in ein Weibchen, das mit mehreren Männchen zusammen lebt. Stirbt das Weibchen verwandelt sich das stärkste Männchen innerhalb einer Woche in ein Weibchen. Praktisch – oder?");
			in.putExtra(KEY_THUMB_URL, "http://watermark.wa.funpic.de/parkGuide/tiere/arten/Tiere_Arten_AnemwebUe.jpg");
			in.putExtra(KEY_SOUND, "");
			in.putExtra(KEY_VIDEO, "");

			startActivity(in);
			
		}
	}


	public void onStatusChanged(String provider, int status, Bundle extras) {
		// TODO Auto-generated method stub
		
	}
	
}
